紀錄檔記錄(Logging)是指儲存紀錄檔的行為。在應用程式中可以紀錄使用的行為、例外事件的訊息等,最簡單的做法是將紀錄檔寫入單個存放紀錄檔的檔案。
ASP.NET Core內建的DI就為會注入Logging的服務。
下方範例建立一個ApiController,注入Logging服務並建立紀錄
[ApiController]
[Route("api/[controller]")]
public class LoggingSampleController
{
private readonly ILogger<LoggingSampleController> _logger;
public LoggingSampleController(ILogger<LoggingSampleController> logger)
{
_logger = logger;
}
public ActionResult<string> Get()
{
_logger.LogWarning("LogginSample in");
return "Logging Page!!";
}
}
ILogger建立物件時,會指定分類。該類別會包含在每個由該 ILogger 執行個體所產生的記錄訊息中。
執行後的輸出結果:
除了預設的設定,ASP.NET Core還提供了多個內建紀錄提供者可以選擇。
記錄提供者(Logging provider)會儲存記錄檔,但 Console 顯示記錄的provider除外。
ASP.NET Core 包括下列記錄提供者:
名稱 | 使用方式 | 描述 |
---|---|---|
Console(預設已加入) | logging.AddConsole(); | 會將輸出記錄到主控台。 |
Debug(預設已加入) | logging.AddDebug(); | 會使用 system.servicemodel 類別來寫入System.Diagnostics.Debug記錄輸出。 |
EventSource | logging.AddEventSourceLogger(); | 會寫入名為的跨平臺事件來源 Microsoft-Extensions-Logging。 |
EventLog(僅限Windows) | logging.AddEventLog(); | 會將記錄輸出傳送至 Windows 事件記錄檔。 |
Azure App Service | logging.AddAzureWebAppDiagnostics(); | 將記錄寫入至 Azure App Service 應用程式檔案系統中的文字檔,並寫入至 Azure 儲存體帳戶中的 Blob 儲存體。(須先安裝Microsoft.Extensions.Logging.AzureAppServices套件) |
要更換Logging provider,可以從Program.cs中修改成下列範例:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
呼叫 ClearProviders ,以從產生器中移除所有 ILoggerProvider 實例。
加入Console記錄提供者。
記錄設定通常是由 appsettings.json 的 Logging區段所提供。透過appsettings.{Environment}.json可以依照不同環境套用不同的設定
紀錄等級(Logging:LogLevel)用來設定不同紀錄類別下的紀錄詳細程度
|LogLevel |Value|方法|描述 |
|-----|--------|-----|
|Trace|0 |LogTrace| 包含最詳細的訊息。 這些訊息可能包含敏感性應用程式資料。 這些訊息預設為停用,且不應在生產環境中啟用。|
|Debug |1 |LogDebug|用於偵錯工具和開發。 請在生產環境中小心使用,因為有大量的數量。 |
|Information |2 |LogInformation| 追蹤應用程式的一般流程。 可能具有長期值。|
|Waring |3 |LogWarning| 針對異常或非預期的事件。 通常會包含不會導致應用程式失敗的錯誤或狀況。|
|Error |4 |LogWarning| 發生無法處理的錯誤和例外狀況。 這些訊息表示目前的作業或要求失敗,而不是整個應用程式的失敗。|
|Critical |5 |LogWarning|發生需要立即注意的失敗。 範例:資料遺失情況、磁碟空間不足。 |
|None |6 | | 指定記錄類別不應寫入任何訊息。|
elmah.io (GitHub Repository)
Gelf (GitHub Repository)
JSNLog (GitHub Repository)
KissLog.net (GitHub Repository)
Log4Net(GitHub Repository)
NLog (GitHub Repository)
Serilog (GitHub Repository)
透過良好設計記錄管理設計,可以有效的紀錄應用程式相關資訊,為管理應用程式的運行更增加效率。
參考文章
.NET Core 與 ASP.NET Core 中的記錄